#include "../../include/Param.h"


/**
 * 有参构造
 * @param string _name 参数名称
 */
Param::Param(string _name) : name(_name),unit("none"),value("none"),remark("none") {}

/**
 * 复制构造函数
 */
Param::Param(Param* const param):name(param->getName()),unit(param->getUnit()),value(param->getValue()),remark(param->getRemark()),isId(false) {}
/**
 * 析构函数
 */
Param::~Param() {}
/**
 * 获取参数名称
 */
string Param::getName() {
    return this->name;
}
/**
 * 获取参数单位
 */
string Param::getUnit() {
    return this->unit;
}
/**
 * 获取参数数值
 */
string Param::getValue() {
    return this->value;
}
/**
 * 获取参数备注
 */
string Param::getRemark() {
    return this->remark;
}
/**
 * 设置参数单位
 */
void Param::setUnit(string _unit) {
    this->unit = _unit;
}
/**
 * 设置参数数值
 */
void Param::setValue(string _value) {
    this->value = _value;
}
/**
 * 设置参数备注
 */
void Param::setRemark(string _remark) {
    this->remark = _remark;
}
/**
 * 设置为ID参数
 */
void Param::thisIsId() {
    isId = true;
}
/**
 * 参数串行化
 */
string Param::toString() {
    string str = "param: ";
    str += name + " " + unit + " " + value + " remark: " + remark + " :remark";
    str += " :param";
    return str;
}

/**
 * 从字符串中解析出参数类
 */
Param* Param::strToParam(istringstream &iss) {
    char split = ' ';       // 分隔符
    string token;		// 接收缓冲区
    
    // 接收起始符号
    getline(iss, token, split);

    // 接收参数名称
    getline(iss, token, split);
    Param* param = new Param(token);
    
    // 接收参数单位
    getline(iss, token, split);
    param->setUnit(token);
    // 接收参数数值
    getline(iss, token, split);
    param->setValue(token);

    // 接收备注起始符
    getline(iss, token, split);

    // 接收备注
    string remark = "";
    getline(iss, token, split);
    while (true)
    {
        remark += token;
        getline(iss, token, split);
        if(token == ":remark") break;
        remark += ' ';
    }
    param->setRemark(remark);
    // 接收终止符
    getline(iss, token, split);

    return param;
}

